package com.haojin.java2;

import org.junit.Test;

import java.io.PrintStream;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * @author .29.
 * @create 2022-04-21 14:29
 */
/*
1.使用情景：当要传递给Lambda体的操作。已经有实现的方法了，可以使用方法引用

2.方法引用本质上就是Lambda表达式，而Lambda表达式作为函数式接口的实例。
  所以方法引用，也是函数式接口的实例

3.使用格式： 类（或对象） ::  方法名

4.具体分为如下三种情况
    对象 :: 非静态方法
    类   :: 静态方法
    类   :: 非静态方法

5.方法引用使用的要求：要求接口中的的抽象方法的形参列表和返回值类型与方法引用的
                    方法的形参列表与返回值类型相同！（针对情况1，2）

 */
public class MethodRefTest {
    /*
    情况一：对象 :: 实例方法
    Consumer中的void accept(T t)
    PrintStream中的void println(T t)
     */
    @Test
    public void test1(){
        Consumer<String> con1 = s -> System.out.println(s);
        con1.accept("我爱你");

        System.out.println("******************************");
        PrintStream ps = System.out;
        Consumer<String> con2 = ps :: println;
        con2.accept("好爱你");
    }

    /*
    Supplier种的T get()
    Employee中的String getName()
     */
    @Test
    public void test2(){


    }
}
